--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/backend/announce_manager.py fda9187e95d8b9cc8373c1de23cefce6928c241d (fda9187e) Text, 2.81 KB
Tff7b72import T7ee787base64
Tff7b72from T7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72class T56d364AnnounceManagerTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4: Te6edf3DatabaseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Te6edf3db
Tff7b72def Td2a8ffupsert_announceTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3reticulumTb4b4b4,
Te6edf3identityTb4b4b4,
Te6edf3destination_hashTb4b4b4,
Te6edf3aspectTb4b4b4,
Te6edf3app_dataTb4b4b4,
Te6edf3announce_packet_hashTb4b4b4,
Tb4b4b4)Tb4b4b4:
T8b949e# get rssi, snr and signal quality if available
Te6edf3rssi Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_packet_rssiTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)
Te6edf3snr Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_packet_snrTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)
Te6edf3quality Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_packet_qTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)
T8b949e# prepare data to insert or update
Te6edf3data Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destination_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3destination_hashTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Te6edf3destination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4: Te6edf3identityTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffidentity_public_keyTa5d6ff"Tb4b4b4: Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(Te6edf3identityTff7b72.Td2a8ffget_public_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(
Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Te6edf3rssiTb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Te6edf3snrTb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: Te6edf3qualityTb4b4b4,
Tb4b4b4}
T8b949e# only set app data if provided
Tff7b72if Te6edf3app_data Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(Te6edf3app_dataTb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72def Td2a8ffget_filtered_announcesTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3aspectTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3identity_hashTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3destination_hashTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3queryTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3blocked_identity_hashesTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3limitTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3offsetTff7b72=T79c0ff0Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3sql Tff7b72= Ta5d6ff"""
Ta5d6ff SELECT a.*, c.custom_image as contact_image
Ta5d6ff FROM announces a
Ta5d6ff LEFT JOIN contacts c ON (
Ta5d6ff a.identity_hash = c.remote_identity_hash OR
Ta5d6ff a.destination_hash = c.lxmf_address OR
Ta5d6ff a.destination_hash = c.lxst_address
Ta5d6ff )
Ta5d6ff WHERE 1=1
Ta5d6ff Ta5d6ff"""
Te6edf3params Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3aspectTb4b4b4:
Te6edf3sql Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff AND a.aspect = ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3aspectTb4b4b4)
Tff7b72if Te6edf3identity_hashTb4b4b4:
Te6edf3sql Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff AND a.identity_hash = ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3identity_hashTb4b4b4)
Tff7b72if Te6edf3destination_hashTb4b4b4:
Te6edf3sql Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff AND a.destination_hash = ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72if Te6edf3queryTb4b4b4:
Te6edf3like_term Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff%Tffd700{Te6edf3queryTffd700}Ta5d6ff%Ta5d6ff"
Te6edf3sql Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff AND (a.destination_hash LIKE ? OR a.identity_hash LIKE ?)Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffextendTb4b4b4(Tb4b4b4[Te6edf3like_termTb4b4b4, Te6edf3like_termTb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3blocked_identity_hashesTb4b4b4:
Te6edf3placeholders Tff7b72= Ta5d6ff"Ta5d6ff, Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4] Tff7b72* Tffa657lenTb4b4b4(Te6edf3blocked_identity_hashesTb4b4b4)Tb4b4b4)
Te6edf3sql Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff AND a.identity_hash NOT IN (Tffd700{Te6edf3placeholdersTffd700}Ta5d6ff)Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffextendTb4b4b4(Te6edf3blocked_identity_hashesTb4b4b4)
Te6edf3sql Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff ORDER BY a.updated_at DESCTa5d6ff"
Tff7b72if Te6edf3limit Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3sql Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff LIMIT ? OFFSET ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffextendTb4b4b4(Tb4b4b4[Te6edf3limitTb4b4b4, Te6edf3offsetTb4b4b4]Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchallTb4b4b4(Te6edf3sqlTb4b4b4, Te6edf3paramsTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────